*****************************************************************************
*****************************************************************************

BIRD ID#:        
ISSUE TITLE:     IBIS-AMI clock_times Clarification
REQUESTER:       Scott McMorrow, Teraspeed Consulting Group
DATE SUBMITTED:  
DATE REVISED:    
DATE ACCEPTED BY IBIS OPEN FORUM:  

*****************************************************************************
*****************************************************************************

STATEMENT OF THE ISSUE:

In the Section, "NOTES ON ALGORITHMIC MODELING INTERFACE AND PROGRAMMING
GUIDE", the paragraph describing clock_times has led to inconsistent and 
incorrect model implementation.

The suggestion is to clarify usage of the parameter consistent with the 
original intent.


*****************************************************************************

Replace this text:
|
| 3.2.2.3 clock_times
| ===================
|
| Vector to return clock times.  The clock times are referenced to the start
| of the simulation (the first AMI_GetWave call).  The time is always
| greater or equal to zero.  The last clock is indicated by putting a value
| of -1 at the end of clocks for the current wave sample.  The clock_time
| vector is allocated by the EDA platform and is guaranteed to be greater
| than the number of clocks expected during the AMI_GetWave call.  The clock
| times are the times at which clock signal at the output of the clock
| recovery loop crosses the logic threshold.  It is to be assumed that the
| input data signal is sampled at exactly one half clock period after a
| clock time.
|



--------------

With the following text with changes noted by "|*"  lines:

|
| 3.2.2.3 clock_times
| ===================
|
| Vector to return clock times.  The clock times are referenced to the start
| of the simulation (the first AMI_GetWave call).  The time is always
|* greater or equal to zero.    The clock_time
|* vector is allocated by the EDA platform and is guaranteed to be greater
|* than the number of clocks expected during the AMI_GetWave call.  The clock
|* times are the times at which the clock signal at the output of the clock
|* recovery loop crosses the logic threshold in a full data rate CDR clocking
|* system (i.e clock period equals UI). The effective receiver sampling
|* point is equal to the clock_times plus 1/2 the nominal UI period. The last 
|* valid clock of the current GetWave call is indicated 
|* by placing -1 after the last valid clock in the clock_time vector.
|*
|* The clock ticks represented by clock times should be strictly monotonic, 
|* both within the clock_times array returned from a single call to GetWave 
|* and between successive calls to GetWave. That is, within a given clock_times 
|* array each successive valid value is greater than the value that preceded it, 
|* and the first valid value from a given call to GetWave must be greater than 
|* the last valid value from the preceding call to GetWave.Any non-strict-monotonic 
|* behavior of clock times (including two identical values) should be considered 
|* by EDA platform as a DLL failure and should lead to simulation termination 
|* with respective message.
|*
|* Each valid pair of values in the clock_times array shall be used to sample the output 
|* waveform as previously described, regardless whether that waveform sample occurs
|* in the waveform segment being returned by the current call to GetWave, or the 
|* waveform segment to be returned by the next GetWave call.
|*
|* Although clock_times will generally be related to the UI interval for the 
|* primary SerDes channel being simulated, there is no requirement that there is
|* any relationship between the clock ticks generated by clock_times and the actual
|* waveform returned in the primary channel.  It is possible for the CDR to go out
|* of lock, resulting in clock_ticks that have no definite relationship to the output
|* wave.
|*
|* There is no requirement that clock times should be integer multiples of the 
|* sample interval (or time step used to represent the waveforms).There is also 
|* no requirement that there be a relationship between clock_times in the 
|* primary channel, and any additional waveform components in the wave vector, such 
|* as crosstalk.  Crosstalk channels shall not be constrained to any timing 
|* relationship to the primary channel, or to the clock_times vector.
|






*****************************************************************************

ANALYSIS PATH/DATA THAT LED TO SPECIFICATION

Additional notes regarding correct clock_times usage have been included as part
of this BIRD, distilled from discussions on the ibis-macro reflector.

Additional notes regarding clock_times

    * Internal to a device, the sampling time tick "sees" the part of the waveform
       that immediately precedes and follows that tick, within some sampling uncertainty window.
    * That point, is the true center of the eye for that interval.
    * The AMI spec requires the clock tick to be placed 1/2 UI before the actual 
       sample point, essentially at the differential crossing.
    * Then it requires the EDA tool to shift the tick by 1/2 UI.
          o the assumption here is that there is always a fixed relationship to the UI.
          o Thus the DLL must calculate the sampling point, then move it back by 1/2 UI 
            to create a clock tick that can then be moved back by the EDA platform to 
            the same sampling point that it first calculated.
    * It is therefore a requirement that the DLL move the sample point back by 1/2 the 
       nominal UI, and not the instantaneous UI, otherwise there will be inadvertent 
       jitter in the clock_times.
    * Clock_times + 1/2 nominal UI is always the center of every eye interval.
   


*****************************************************************************

ANY OTHER BACKGROUND INFORMATION:

This is an editorial correction to clarify the usage of clock_times.

*****************************************************************************
